周边POI搜索 Sample详情
最后更新时间:2019年7月5日
POI的周边搜索,即为范围查询方式,根据用户设置的查询范围(支持圆、矩形),可结合信息类型等条件进行查询,搜索满足条件的POI信息点,最后可以通过标注、绘制或者列表方式展示查询到的兴趣点。
周边搜索的实现方法与关键字搜索基本上类似,实现的思路与方法如下:
1
与关键字POI搜索相同。
//创建POI查询对象 MGSPoiSearch *poiSearch=[[MGSPoiSearch alloc] init]; NSString *poiDbPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]stringByAppendingPathComponent:@"/MapGIS Mobile 2D Sample/POI/WuhanPOI.db"]; //POI数据路径 //为POI查询对象设置配置好的.db数据,并以此来初始化 [poiSearch initWithDBPath:poiDbPath]; //设置查询每页的结果数目 [poiSearch setPageSize:40];
2
周边搜索,通过MGSPoiSearch类对象的bound属性设置范围条件,调用query属性设置查询属性条件。
首先,需要创建查询范围对象MGSSearchBound,根据不同的参数来构造,可以实现圆形范围、矩形范围两种周边搜索方式。一般实现范围查询时,可将查询的范围事先绘制在地图上,待查询POI之后可对比效果,但要注意坐标系一致的问题。
//坐标点 MGSDot centerDot=MGSDotMake(12725830.65, 3571659.71); //查询范围(坐标点、半径) MGSSearchBound *searchBound=[[MGSSearchBound alloc] initWithCenter:centerDot radiusInMeters:500]; //为POI查询对象设置查询范围 [poiSearch setBound:searchBound];
//矩形范围 MGSRect rect=MGSRectMake(12725430, 3571159, 12726230, 3571959); //查询范围(rect矩形) MGSSearchBound *searchBound=[[MGSSearchBound alloc] initWithRect:rect]; //为POI查询对象设置查询范围 [poiSearch setBound:searchBound];
设置了查询范围,如果需要进行POI的分类查询,还需要利用query属性设置查询条件,POI类型参考关键字搜索模块中的说明。当然,也可以周边搜索和关键字搜索两种模式结合。
//设置POI查询条件:POI分类查询,如查询“中餐厅”类型 MGSQuery *poiQuery=[[MGSQuery alloc] initWithCityCode:nil category:POI_TYPE_FOODBEVERAGES cityCode:nil]; [poiSearch setQuery:poiQuery];
3
查询POI,遍历查询结果,实现代码与关键字搜索一样,也可通过多种形式展示,核心代码参考关键字搜索小节。
//查询POI MGSPoiPagedResult *poiPagedResult=[poiSearch searchPOI]; if (poiPagedResult != nil && poiPagedResult.totalPOICount > 0) { for (int i=1; i<=poiPagedResult.pageCount; i++) { //只获取第1页结果 NSArray<MGSPoiItem *> *poiItemArr=[poiPagedResult getPageWithPageNumber:i]; for (int j=0; j<[poiItemArr count]; j++) { //获取POI项 MGSPoiItem *poiItem=poiItemArr[j]; //获取坐标点 MGSDot dot=[poiItem point]; //经纬度转Web墨卡托 [MGSSpaProjection lonLat2Mercator:&dot]; //POI名称、电话、地址、行政区划代码、类型代码 NSString *name=[poiItem name]; NSString *tel=[poiItem tel]; NSString *address=[poiItem address]; NSString *adCode=[poiItem adCode]; NSString *typeCode=[poiItem typeCode]; } } } else { NSLog(@"未查询到结果"); }
POI周边搜索实现效果如下图所示: